home *** CD-ROM | disk | FTP | other *** search
-
- #include "defs.h"
-
- int *_am_primearray_init = NULL;
- int *_am_pp_init = NULL;
- int _am_asciiconv[]={1000000000,
- 100000000,
- 10000000,
- 1000000,
- 100000,
- 10000,
- 1000,
- 100,
- 10,
- 1};
-
-
- int am_init()
- {
- int a;
- if((_am_primearray_init = _getPrimes(46338)) == 0)
- return 0;
- if((_am_pp_init=(int*)malloc(4792*sizeof(int)))==NULL)
- return 0;
- for(a=0;a<4792;a++){
- _am_pp_init[a]=_am_primearray_init[a]*_am_primearray_init[a];
- }
- return 1;
- }
-
- int* _getPrimes(int limit)
- {
- int i;
- int j;
- int n;
- int* p = 0;
-
- if(limit < 10)
- {
- if((p = (int*)malloc(5 * sizeof(int))) == 0)
- return 0;
- p[0] = 2;
- p[1] = 3;
- p[2] = 5;
- p[3] = 7;
- p[4] = 0;
- if(limit < 7)
- p[3] = 0;
- if(limit < 5)
- p[2] = 0;
- if(limit < 3)
- p[1] = 0;
- if(limit < 2)
- p[1] = 0;
- return p;
- }
-
- if((p = (int*)calloc(limit,sizeof(int))) == 0)
- return 0;
- p[0] = 2;
- p[1] = 3;
- p[2] = 5;
- p[3] = 0;
- n = 3;
-
- for(i = 9; i < limit; i+= 6)
- p[i] = 1;
- for(i = 25; i < limit; i += 30)
- p[i] = 1;
- for(i = 35; i < limit; i += 30)
- p[i] = 1;
-
- i = 7;
- while(i * i < limit)
- {
- p[n++] = i;
- for(j = i * i; j < limit; j += 2 * i)
- p[j] = 1;
- while(p[i += 2] != 0);
- }
-
- while(i < limit)
- {
- p[n++] = i;
- while((i += 2) < limit && p[i] != 0);
- }
-
- p[n] = 0;
- p = (int*)realloc(p,(n + 1) * sizeof(int));
-
- return p;
- }